#include "my_uart.h"




///< LPUART配置
static void app_LpUart_Cfg(void)
{
    stc_lpuart_init_t  stcInit = {0};
    
    ///<外设模块时钟使能
    SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_LPUART1);    
    
    ///<LPUART 初始化
    stcInit.u32StopBits    = LPUART_STOPBITS_1;            ///< 1停止位
    stcInit.u32Parity      = LPUART_PARITY_NONE;           ///< 无校验
    stcInit.u32FrameLength = LPUART_FRAME_LEN_8BITS;       ///< 帧长8位
    stcInit.u32TransMode   = LPUART_MODE_TX_RX;               ///< 发送模式  LPUART_MODE_TX_RX
    stcInit.stcBaudRate.u32SclkSrc  = LPUART_CLKSRC_PCLK;  ///< 传输时钟源
    stcInit.stcBaudRate.u32Sclk     = SYSCTRL_GetPCLK();   ///< PCLK获取
    stcInit.stcBaudRate.u32BaudRate = 115200;                ///< 波特率

    LPUART_Init(LPUART1, &stcInit);
     
}

/******************
 *  PD5 ---TX LPUART1    AF1
 *  PD6 ----LPUART1_RXD  AF1
 * */ 
///< 端口配置
static void my_lpuart_port_cfg(void)
{
    stc_gpio_init_t stcGpioInit = {0};
    
    ///< 外设时钟使能
    SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_PD);
    
    ///< UART端口初始化
    stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = GPIO_PIN_05;
    stcGpioInit.u32Pull = GPIO_PULL_UP;
    GPIOD_Init(&stcGpioInit);
    
    GPIO_PD05_AF_LPUART1_TXD_SET();


    stcGpioInit.u32Mode = GPIO_MODE_INPUT;
    stcGpioInit.u32Pin  = GPIO_PIN_06;
    GPIOD_Init(&stcGpioInit);
    GPIO_PD06_AF_LPUART1_RXD_SET();
    // stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    // stcGpioInit.u32Pin  = GPIO_PIN_05;
    // stcGpioInit.u32Pull = GPIO_PULL_UP;
    // GPIOA_Init(&stcGpioInit);
    
    // GPIO_PD05_AF_LPUART1_TXD_SET();
}

PUTCHAR_PROTOTYPE
{
// #ifndef  RELEASE_VER   
    LPUART_Transmit(LPUART1, (uint8_t*)(&ch), 1, 0xFFFFFF);
// #endif    
    return ch;
}




// void LpUart1_IRQHandler(void)
// {
//     if(LPUART_GetFlag(LPUART1, LPUART_FLAG_RC))
//     {
//         if(LPUART_GetFlag(LPUART1, LPUART_FLAG_PE|LPUART_FLAG_FE))
//         {
//             ///< 错误处理……
//             LPUART_ClearIrq(LPUART1, LPUART_FLAG_PE|LPUART_FLAG_FE);
//         }
//         else
//         {
//             LPUART_ReceiveIT(LPUART1, &gu8RxCmdTxLen);
//             LPUART_ClearIrq(LPUART1, LPUART_FLAG_RC);
//             LPUART_EnableIrq(LPUART1, LPUART_INT_TXE);
//             LPUART_DisableIrq(LPUART1, LPUART_INT_RC);
//         }
//     }
    
//     if(LPUART_GetFlag(LPUART1, LPUART_FLAG_TXE))
//     {
//         LPUART_ClearIrq(LPUART1, LPUART_FLAG_TXE);
//         if(gu8RxCmdTxLen)
//         {
//             LPUART_TransmitIT(LPUART1, &gu8RxCmdTxLen);
//             gu8RxCmdTxLen--;
//         }
//         else
//         {
//             LPUART_EnableIrq(LPUART1, LPUART_INT_RC);
//             LPUART_DisableIrq(LPUART1, LPUART_INT_TXE);
//         }
//     }
// }



void my_uart_init(void)
{
    my_lpuart_port_cfg();
    app_LpUart_Cfg();


    printf("\n\r@ LPUART Printf Example:\n\r\
            ==>> HC32F002 STK \n\r\
            ==>> www.xhsc.com.cn \n\r");

    LPUART_ClearIrq(LPUART1, LPUART_FLAG_ALL);
    LPUART_EnableIrq(LPUART1, LPUART_INT_RC);
    EnableNvic(LPUART1_IRQn, IrqLevel2, TRUE);        
}


